# 对Mind+软件自定义库提供一个接口
# 主要是使用函数替代类

from pca9685 import PCA9685


class MpPca9685:

    def __init__(self, address=0x40, frequency=50):
        self.device = PCA9685(address, frequency, False, 0)

    def command_analog_write(self, pin=0, value=0):
        """
            指定引脚输出PWM(范围是0~255)，模仿Arduino的analogWrite
            :param pin: 引脚(范围是0~15)
            ：param value: pwm值（范围是0~255）
        """
        self.device.analog_write(pin, value)

    def command_digital_write(self, pin=0, value=0):
        """
            指定引脚输出高低电平,模仿Arduino的digitalWrite
            :param pin:引脚
            :param value:输入为0，低电平，其它值为高电平。
        """
        self.device.digital_write(pin, value)

    def command_servo_angle(self, pin=0, angle=0):
        """
            设置舵机角度
            :param pin:舵机的通道（4~15)
            :param angle: 角度（0~180)
            :return:
        """
        self.device.set_servo_angle(pin, angle)

    def command_drive_motor(self, pin=0, speed=100):
        """
            驱动一个电机，没有方向，接一个通道，另一根线接地
            :param pin: 通道(0~15)
            :param speed: 速度（0~255）
            :return:
        """
        self.device.drive_one_motor(pin, speed)

    def command_drive_l298p(self, left_speed=100, right_speed=100):
        """
            输入马达速度，驱动马达前进，此函数用于驱动那种需要两路PWM,两路数字信号的板，例如L298P
            PCA9685的0，2脚对应左，右马达的方向，1,3对应左右的PWM
            :param left_speed: 左马达速度（-255,255）
            :param right_speed: 右马达速度（-255,255）
        """
        self.device.drive_motor(left_speed, right_speed)

    def command_drive_l298n(self, left_speed=100, right_speed=100):
        """
            输入马达速度，驱动马达前进，此函数用于驱动那种需要四路PWM信号的板，例如L298N
            PCA9685的0，1脚对应驱动板左马达的两个驱动输入，2,3对应驱动板右马达的两个驱动输入
            :param left_speed: 左马达速度（-255,255）
            :param right_speed: 右马达速度（-255,255）
        """
        self.device.drive_motor_2(left_speed, right_speed)

    def  command_drive_motor_free(self, left_speed=100, right_speed=100, pin_left_1=0, pin_left_2=1,
                                  pin_right_1=2, pin_right_2=3):
        """
            输入马达速度，驱动马达前进，此函数用于驱动那种需要四路PWM信号的板，例如L298N
            PCA9685的0，1脚对应驱动板左马达的两个驱动输入，2,3对应驱动板右马达的两个驱动输入
            :param left_speed: 左马达速度（-255,255）
            :param right_speed: 右马达速度（-255,255）
            :param pin_left_1: 驱动板左马达的第1个驱动输入
            :param pin_left_2: 驱动板左马达的第2个驱动输入
            :param pin_right_1: 驱动板右马达的第1个驱动输入
            :param pin_right_2: 驱动板右马达的第2个驱动输入
        """
        self.device.drive_motor_2(left_speed, right_speed, pin_left_1, pin_left_2,
                                  pin_right_1, pin_right_2)

    def command_close_device(self):
        """
            关闭Ch341T的IIC通讯
        """
        self.device.close_device()
